package Tanks;

import java.io.FileNotFoundException;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.golden.gamedev.object.background.ColorBackground;
import com.golden.gamedev.object.background.ImageBackground;
import com.golden.gamedev.object.*;
import com.golden.gamedev.object.collision.*;
import com.golden.gamedev.*;
import com.golden.gamedev.object.background.*;



public class Mapa 
{
    //Mapa ma wymiar 13x13 pól, przy czym pole ma wymiary 50x50 piksele
    Pole mapa[][]=new Pole[13][13];
    int wielkoscPola;
    SpriteGroup WATER_GROUP,BRICK_GROUP,STEEL_GROUP,ORZELEK_GROUP;
    //konstruktor
    public Mapa(String fileName,BufferedImage brick,BufferedImage steel,BufferedImage tree,BufferedImage water,BufferedImage empty,BufferedImage orzelek) throws FileNotFoundException
    {
        wielkoscPola=50;
        WATER_GROUP = new SpriteGroup("Grupa wody");
        BRICK_GROUP= new SpriteGroup("Grupa cegiel");
        STEEL_GROUP = new SpriteGroup("Grupa stali");
        ORZELEK_GROUP = new SpriteGroup("Orzelek");
        //wczytać mapę z pliku
        fileName="Stuff/"+fileName+".txt";
        try
        {
            //File plikMapa = new File(fileName);
            //Scanner scan = new Scanner(plikMapa);
   
            BufferedReader reader = new BufferedReader(new FileReader(fileName));
            for (int i=0; i<=12; i++)
            {
                String line=reader.readLine();
                for (int j=0; j<=12; j++)
                {
                    //char znak= (char) scan.nextByte();
                    char znak=line.charAt(j);
                    //Przyporządkować wczytane znaki do TYPÓW pól w tablicy mapa wg. klucza
                    //B - brick - cegły
                    //S - steel - stalowy bunkier
                    //W - water - woda
                    //T - tree - drzewa
                    //E - empty - pusty
                    switch (znak)
                    {
                        case 'B':
                            mapa[i][j]=new Pole("brick",wielkoscPola*i+1,wielkoscPola*j+1,brick);
                            WATER_GROUP.add(mapa[i][j]);
                            BRICK_GROUP.add(mapa[i][j]);
                            break;
                        case 'S':
                            mapa[i][j]=new Pole("steel",wielkoscPola*i+1,wielkoscPola*j+1,steel);
                            WATER_GROUP.add(mapa[i][j]);
                            STEEL_GROUP.add(mapa[i][j]);
                            break;
                        case 'O':
                            mapa[i][j]=new Pole("orzelek",wielkoscPola*i+1,wielkoscPola*j+1,orzelek);
                            ORZELEK_GROUP.add(mapa[i][j]);
                            break;                               
                        case 'W':
                            mapa[i][j]=new Pole("water",wielkoscPola*i+1,wielkoscPola*j+1,water);
                            WATER_GROUP.add(mapa[i][j]);
                            break;
                        case 'T':
                            mapa[i][j]=new Pole("tree",wielkoscPola*i+1,wielkoscPola*j+1,tree);
                            break;
                        case 'E':
                            mapa[i][j]=new Pole("empty",wielkoscPola*i+1,wielkoscPola*j+1,empty);
                            break;                       
                        default:
                            mapa[i][j]=new Pole("empty",wielkoscPola*i+1,wielkoscPola*j+1,empty);
                            break;
                    }
                }
            }
            reader.close();
        }
        catch (IOException i)
        {
            
        }
    }
    //Wyświetl poziom
    void wyswietl(Graphics2D gd)
    {
        for (int i=0;i<=12;i++)
        {
            for (int j=0;j<=12;j++)
            {
                if(mapa[i][j]._texture=="tree.png")
                {
                    mapa[i][j].render(gd);
                }
            }
        }
        WATER_GROUP.render(gd);
        BRICK_GROUP.render(gd);
        STEEL_GROUP.render(gd);
        ORZELEK_GROUP.render(gd);
    }
    
    boolean kolizjaCzolg (SpriteGroup grupa)
    {
        boolean coll=false;
        CollisionManager kol = new MapaCollisionTank();
        kol.setCollisionGroup(WATER_GROUP, grupa);
        kol.checkCollision();
        kol.setCollisionGroup(BRICK_GROUP, grupa);
        kol.checkCollision();
        kol.setCollisionGroup(ORZELEK_GROUP, grupa);
        kol.checkCollision();
        return coll;
    }
    
    void kolizjaPocisk (SpriteGroup grupa)
    {   
        CollisionManager kol = new MapaCollisionBullet();
        kol.setCollisionGroup(BRICK_GROUP, grupa);
        kol.checkCollision();
        CollisionManager kol2 = new MapaCollisionBulletSteel();
        kol2.setCollisionGroup(STEEL_GROUP, grupa);
        kol2.checkCollision();     
        CollisionManager kol3 = new MapaCollisionBulletOrzel();
        kol3.setCollisionGroup(ORZELEK_GROUP, grupa);
        kol3.checkCollision(); 
    }
    
    void kolizjaOrzel (SpriteGroup grupa)
    {      
        CollisionManager kol = new MapaCollisionBulletOrzel();
        kol.setCollisionGroup(ORZELEK_GROUP, grupa);
        kol.checkCollision(); 
    }
}

class MapaCollisionTank extends CollisionGroup 
{
    public boolean _collided;
    public MapaCollisionTank() 
    {
        
	pixelPerfectCollision = true;
        _collided=false;
    }
    public boolean _collision()
    {
        return _collided;
    }
    
    @Override
   public void collided(Sprite s1, Sprite s2) 
   {
      s2.forceX(collisionX2);
      s2.forceY(collisionY2);
      _collided=true;
      //s2.setImmutable(_collided);
   }
    
    @Override
    public void checkCollision()
    {
        super.checkCollision();
    }

}

class MapaCollisionBullet extends BasicCollisionGroup 
{
    public MapaCollisionBullet() 
    {
	pixelPerfectCollision = true;
    }
    @Override
   public void collided(Sprite s1, Sprite s2) 
   {
       s1.setActive(false);
       s2.setActive(false);
   }
}

class MapaCollisionBulletSteel extends BasicCollisionGroup 
{
    public MapaCollisionBulletSteel() 
    {
	pixelPerfectCollision = true;
    }
    @Override
   public void collided(Sprite s1, Sprite s2) 
   {
       s2.setActive(false);
   }
}

class MapaCollisionBulletOrzel extends BasicCollisionGroup 
{
    public MapaCollisionBulletOrzel() 
    {
	pixelPerfectCollision = true;
    }
    @Override
   public void collided(Sprite s1, Sprite s2) 
   {
       s1.setActive(false);
       s2.setActive(false);
       Global.gameOver=true;
       
       
   }
}